text: Be more careful with cached layouts
authorMatthias Clasen <mclasen@redhat.com>
Sun, 12 Apr 2020 19:12:37 +0000 (15:12 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 12 Apr 2020 21:32:57 +0000 (17:32 -0400)
If we call any functions that may call ensure_layout
themeselves, we risk having the cached layout pulled
out from underneath. Better play it safe and take a
reference.

gtk/gtktext.c

index a80a78b6166a83de7345db77accc06e556a386ec..311a3e7246e7e8c989da3e3f03c7c89a138b0b6a 100644 (file)
@@ -4564,7 +4564,7 @@ gtk_text_draw_cursor (GtkText     *self,
 
   context = gtk_widget_get_style_context (widget);
 
-  layout = gtk_text_ensure_layout (self, TRUE);
+  layout = g_object_ref (gtk_text_ensure_layout (self, TRUE));
   text = pango_layout_get_text (layout);
   gtk_text_get_layout_offsets (self, &x, &y);
 
@@ -4604,6 +4604,8 @@ gtk_text_draw_cursor (GtkText     *self,
 
       gtk_style_context_restore (context);
     }
+
+  g_object_unref (layout);
 }
 
 static void